package com.suixun.util;

import java.text.DecimalFormat;

public class LocationUtil {
    public static float convertFloat(Integer xy) {
        if(xy != null)
            return (float)xy.doubleValue()/1000000;
        else 
            return 0f;
        //return new DecimalFormat("#.000000").format(xy.doubleValue()/1000000);
    }
    
    public static String convertString(Integer xy) {
        return new DecimalFormat("#.000000").format(xy.doubleValue()/1000000);
    }
    
    public static Integer convertInteger(String xy){
        return (int)(Double.parseDouble(xy) * 1000000);
    }
    
    public static Integer convertInteger(float xy){
        return (int)(Double.parseDouble(String.valueOf(xy)) * 1000000);
    }
    
    private static double EARTH_RADIUS = 6378.137;
    private static double rad(double d)
    {
        return d * Math.PI / 180.0;
    }
    public static double getDistance(double lat1, double lng1, double lat2, double lng2)
    {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + 
         Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000d) / 10d;
        return s;
    }
    
    /**
     * 根据经纬度和距离返回一个矩形范围
     * 
     * @param lng
     *            经度
     * @param lat
     *            纬度
     * @param distance
     *            距离(单位为米)
     * @return [lng1,lat1, lng2,lat2] 矩形的左下角(lng1,lat1)和右上角(lng2,lat2)
     */ 
    public static double[] getRectangle(double lng, double lat, long distance) { 
        float delta = 111000; 
        if (lng != 0 && lat != 0) { 
            double lng1 = lng - distance 
                    / Math.abs(Math.cos(Math.toRadians(lat)) * delta); 
            double lng2 = lng + distance 
                    / Math.abs(Math.cos(Math.toRadians(lat)) * delta); 
            double lat1 = lat - (distance / delta); 
            double lat2 = lat + (distance / delta); 
            return new double[] { lng1, lat1, lng2, lat2 }; 
        } else { 
            // TODO ZHCH 等于0时的计算公式 
            double lng1 = lng - distance / delta; 
            double lng2 = lng + distance / delta; 
            double lat1 = lat - (distance / delta); 
            double lat2 = lat + (distance / delta); 
            return new double[] { lng1, lat1, lng2, lat2 }; 
        } 
    } 
}
